package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceCode;
import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.AlbumMapper;
import cn.tedu.csmall.product.mapper.PictureMapper;
import cn.tedu.csmall.product.mapper.SpuMapper;
import cn.tedu.csmall.product.pojo.dto.AlbumAddNewDTO;
import cn.tedu.csmall.product.pojo.dto.AlbumUpdateNewDTO;
import cn.tedu.csmall.product.pojo.entity.Album;
import cn.tedu.csmall.product.pojo.vo.AlbumStandardVO;
import cn.tedu.csmall.product.service.IAlbumService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class AlbumServiceImpl implements IAlbumService {
    @Autowired
    private AlbumMapper albumMapper;
    @Autowired
    private PictureMapper pictureMapper;
    @Autowired
    private SpuMapper spuMapper;
    @Override
    public void addNew(AlbumAddNewDTO albumAddNewDTO) {
        //调用mapper中的方法 根据名称统计数量
        String name = albumAddNewDTO.getName();
        int count = albumMapper.countByName(name);
        //如果count>0则代表已经有该名称的相册 抛出异常
        if (count>0){
            String message = "添加失败,该相册已经存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
        //创建 album 对象 将dto的属性赋值
        Album album = new Album();
        BeanUtils.copyProperties(albumAddNewDTO,album);
        int rows = albumMapper.insert(album);
        if(rows!=1){
            String message = "添加相册失败,服务器忙,请稍后重试!";
            log.warn(message);
            throw  new ServiceException(ServiceCode.ERR_INSERT,message);
        }
    }

    @Override
    public void delete(Long id) {
        //调用mapper中的根据id查询详情方法
        //判断数据是否存在
        //如果不存在 则不能删除 抛出异常
        AlbumStandardVO standardById = albumMapper.getStandardById(id);
        log.debug("根据id={},查询到的标准信息standardById={}",id,standardById);
        if (standardById==null){
            String message = "根据id删除相册失败,该相册不存在";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        //不能存在关联的图片
        //根据相册id统计图片表中 数据的数量
        //若果数量大于零 则存在关联数据 不饿能删除 抛出异常
        int countByAlbumId = pictureMapper.countByAlbumId(id);
        if (countByAlbumId>0){
            String message = "删除相册失败,存在关联的图片";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
        //不能存在关联的spu
        //跟据相册id统计spu表中 存在关联的数据数量
        //如果大于零 则不能删除 抛出异常
        countByAlbumId = spuMapper.countByAlbumId(id);
        if (countByAlbumId>0){
            String message = "删除相册失败,存在关联的spu";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
        //调用相册mapper中的deleteById 删除该相册数据
        //如果生效的行数不等于1 则代表 删除失败 抛出异常
        int rows = albumMapper.deleteById(id);
        if (rows!=1){
            String message = "删除相册失败,服务器忙,请稍后重试!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_DELETE,message);
        }


    }

    @Override
    public void update(AlbumUpdateNewDTO albumUpdateNewDTO) {
        //获取相册的id
        //根据id查询详情
        //若果详情为null 则说明该数据不存在 不能修改 抛出异常
        Long id = albumUpdateNewDTO.getId();
        log.debug("相册id={}",id);
        AlbumStandardVO standardById = albumMapper.getStandardById(id);
        log.debug("standardById:{}",standardById);
        if (standardById==null){
            String message = "修改相册失败,该相册不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        //存在 创建Album对象
        //封装DTO 数据
        //调用albumMapper的updateById方法
        //判断生效的行数是否不等于1
        //是 抛出异常
        Album album = new Album();
        BeanUtils.copyProperties(albumUpdateNewDTO,album);
        log.debug("要修改的相册数据:{}",album);
        int rows = albumMapper.updateById(album);
        if (rows!=1){
            String message = "修改相册失败,服务器忙,请稍后重试!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE,message);
        }
    }
}
